// 简单工厂模式
#include <iostream>
#include <string>
#include <memory>
using namespace std;
// class Fruit
// {
// public:
//     virtual void name() = 0;
// };
// class Apple : public Fruit
// {
// public:
//     void name() override
//     {
//         cout << "我是一个苹果" << endl;
//     }
// };
// class Banana : public Fruit
// {
// public:
//     void name() override
//     {
//         cout << "我是一个香蕉" << endl;
//     }
// };
// class F
// {
// public:
//     static shared_ptr<Fruit> create(string n)
//     {
//         if (n == "苹果")
//         {
//             return make_shared<Apple>();
//         }
//         else
//         {
//             return make_shared<Banana>();
//         }
//     }
// };
// int main()
// {
//     shared_ptr<Fruit> fruit = F::create("苹果");
//     fruit->name();
//     fruit =F::create("香蕉");
//     fruit->name();
// }
// 工厂方法模式


// using namespace std;
// class Fruit
// {
// public:
//     virtual void name() = 0;
// };
// class Apple : public Fruit
// {
// public:
//     void name() override
//     {
//         cout << "我是一个苹果" << endl;
//     }
// };
// class Banana : public Fruit
// {
// public:
//     void name() override
//     {
//         cout << "我是一个香蕉" << endl;
//     }
// };
// class F
// {
// public:
//     virtual shared_ptr<Fruit> create() = 0;
// };
// class AppleF : public F
// {
// public:
//     virtual shared_ptr<Fruit> create() override
//     {
//         return make_shared<Apple>();
//     }
// };
// class BananF : public F
// {
// public:
//     virtual shared_ptr<Fruit> create() override
//     {
//         return make_shared<Banana>();
//     }
// };
// int main()
// {
//     shared_ptr<F> f = make_shared<AppleF>();
//     shared_ptr<Fruit> fruit = f->create();
//     fruit->name();
//     f = make_shared<BananF>();
//     fruit = f->create();
//     fruit->name();
// }

//抽象工厂模式